﻿<html>
	<head>
		<title></title>
	    <style type="text/css">
            .style2
            {
                font-weight: bold;
                font-size: small;
            }
            .style3
            {
                font-size: 11px;
            }
            .style4
            {
                background-color: #CCFFCC;
            }
            .style5
            {
                background-color: #CCFFFF;
            }
            .style6
            {
                background-color: #FFFFFF;
            }
        </style>
	</head>
	<body style="font-family: Verdana; font-size:11px;">
	    <span class="style2">Introduction</span>
        <br />
        &nbsp;&nbsp;&nbsp; Windows application is prefered over web application for its better 
        user experience and accessibility. One place where windows applications falls 
        behind web application is in its in-ability of live upgradation. i.e. When the 
        application requires an upgradation with new features and bug fixes, a patch is 
        required to be installed on every instance of it. This is obviously a tiresome 
        process and sometimes ends into a mess when different version of same 
        application is running on different machines.<p>
            &nbsp;&nbsp;&nbsp; When you are working for a tools group team and responsible for 
            management of various &nbsp;tools being used across your organisation, it becomes 
            very critical to manage this in a smart way. Failing to do so, sometimes leads 
            to loosing of confidence of the application users in using the tool.</p>
    <p>
        &nbsp;&nbsp;&nbsp; Extensil removes these drawbacks of a windows application&nbsp;giving 
        easy of maintainabilty and better configurability. Next section explains the 
        features of Extensil framework in details.</p>
        <br />
        <span class="style2">Features</span>
        <ul>
            <li>
                <p style="margin-left: 10px">
                    <b>Extensibilty of application.</b></p>
                <p style="margin-left: 10px">
&nbsp;&nbsp;&nbsp;&nbsp; Extensil provides an infrastruction to host and support multiple Windows 
                    application on a common platform. Any windows application can be attached to 
                    extensil and they behave like an integral part of it. Acting as a container for 
                    other application Extensil further provides additional functionalities 
                    (mentioned below) to its hosted applications.</p>
                
                            <table cellpadding="0" cellspacing="0" style="width:100%;">
                                <tr>
                                    <td valign="top">
                <img alt="" 
                    src="http://winappextensil.googlecode.com/svn/trunk/Issues/extensilApp.jpg" 
                    width="120" align="top" /></td>
                                    <td class="style3">
                                        <p style="margin-left: 10px">
                    <b>Added Functionalities provided by Extensil:</b></p>
                <ul>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Central control system:</b> Extensil provides a central control system where 
                            user can control the settings and configurations of all installed application.</p>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>ShortCut keys: </b>Application user can define a shortcut keys for easy 
                            access of the application.</p>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Auto Start capability:</b> User can configure whether the application needs 
                            to auto start when ever the system starts.</p>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Visibility configuration: </b>User can configure whether the application 
                            should be visible in application stack of Extensil. Admin can use feature for a 
                            silent installation of a software on users machine.</p>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Easy upgradation to applications:</b> Extensil tool can be configured to 
                            probe for a new or upgraded application from any central repository. This 
                            feature is explained in details below.<li>
                                                    <p style="margin-left: 10px">
                                                        <b>Ready installation:</b> Extensil utility comes with msi installation package. 
                                                        Application developer for Extensil is not required to create a separate packege. 
                                                        New application can be simply zipped and placed along with Extensil installer 
                                                        for its deployment.</td>
                                </tr>
                            </table>
                    </li>
                </ul>
                </li>
<p>
    &nbsp;</p>
<ul>
            <li>
                <p style="margin-left: 10px">
                    <b>Live upgradation.</b>
                    <br />&nbsp;&nbsp;&nbsp; Web application enjoys 
                    advantage over windows based application in terms of easy rollout. When new 
                    features or improvements is required to implement in a the software, one will 
                    obviously do this on a central hosting environment of the web application and 
                    all the users of this application will now view the upgraded application. Same 
                    has always been a challenge in case of windows application. For rolling out any 
                    new features on live windows application, one has to deploy a separate patch on 
                    every machine where this application is installed. This may land up into running 
                    of different versions of the applicaion in parallel and lately resulting into 
                    some mess.
                    <table cellpadding="0" cellspacing="0" 
                        style="width:100%;">
                        <tr>
                            <td>
                                <br />
                                <img alt="" 
                    src="http://winappextensil.googlecode.com/svn/trunk/Issues/extensilProbe.jpg" 
                    width="400" /></td>
                            <td valign="top">
                                <p style="margin-left: 10px" class="style3">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
                                <p style="margin-left: 10px" class="style3">
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    Extensil brings along with the capability where a 
                    windows application can be centrally managed. An upgraded version of the 
                    software can be uploaded at some shared place and all the user application will 
                    get upgraded to this new version.</p>
                                <p style="margin-left: 10px" class="style3">
                                    &nbsp;&nbsp;&nbsp; Administrator can establish a central repository&nbsp;and then 
                                    configure user&#39;s Extensil utility to probe this path. A Extensil can be 
                                    configured to probe multiple probe points. Once the Extensil is configured to 
                                    probe a given point, the utility checks for availability of any new application 
                                    or upgraded version of existing application.</p>
                                <p style="margin-left: 10px" class="style3">
                    &nbsp;&nbsp;&nbsp; Admin can define auto-upgrade/auto-install for an application, in which case 
                                    Extensil will perform auto instalation without user&#39;s involvement. </p></td>
                        </tr>
                    </table>
                </p>
                </li>
        </ul>
        <span class="style2">Category</span>
        <ul>
            <li>
                <p style="margin-left: 10px">
                    <b>What is category?         <br />&nbsp;&nbsp;&nbsp;
                    </b>A Windows form derived from BaseCategory class can be plugged in to Extensil container. The plugged in category now appears and behaves as an integral part of the application and is termed as Category.
                    A category defines specific task screen in association with one or more child screens.<b> 
                </p>
            </li>
            <li>
                <p style="margin-left: 10px">
                    <b>Types of Categories.<br />&nbsp;&nbsp;&nbsp;
                    </b></b>Extensil defines two types of categories.</p>
                    <img alt="" 
                    src="http://winappextensil.googlecode.com/svn/trunk/Issues/extensilSettingsTop.jpg" 
                    width="800" />
                    
                    <b>
                <ul>
                    <li>
                        <p style="margin-left: 10px">
                            <b>System Category<br />&nbsp;&nbsp;&nbsp;
                    </b></b>System category comes along with Extensil framework and comparises of basic 
                            functionality common to all other categories. Example: Settings, Help. </p>
                    </li>
                    <b>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Custom Category<br />&nbsp;&nbsp;&nbsp;
                    </b></b>Custom category is a user defined category which when installed appears as an 
                            integral part of the Extensil framework. Below section explains a custom 
                            category in detail.</p>
                    </li>
                </ul>
            </li>
                    <b>
            <li>
                <p style="margin-left: 10px">
                    <b>Using custom category.<br />&nbsp;&nbsp;&nbsp;
                    </b></b>Custom category can be configured from Settings screen of the Extensil 
                    utility as shown in screen below.</p>
                    
                    <b>
                    
                    <img alt="" 
                    src="http://winappextensil.googlecode.com/svn/trunk/Issues/extensilSettings.jpg" 
                    width="500" />
                </li>
                <ul>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Add New Category<br />&nbsp;&nbsp;&nbsp;
                    </b></b>To add a new custom category:</p>
                        <ol>
                            <li>
                                <p style="margin-left: 10px">
                                    Click on the <i>Browse</i> button.</p>
                            </li>
                            <li>
                                <p style="margin-left: 10px">
                                    Select the Category plugin (zip) path.</p>
                            </li>
                            <li>
                                <p style="margin-left: 10px">
                                    Click on Submit button.</p>
                            </li>
                        </ol>
                    </li>
                    <b>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Remove Category<br /></b></b>&nbsp;&nbsp;&nbsp;
                            To remove a custom category:</p>
                        <ol>
                            <li>
                                <p style="margin-left: 10px">
                                    Select one or more custom category to be deleted. (Tick the checkbox)</p>
                            </li>
                            <li>
                                <p style="margin-left: 10px">
                                    Click the <i>Cross (X)</i> button on top right corner of the screen.</p>
                            </li>
                        </ol>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Reorder Category</b><br />&nbsp;&nbsp;&nbsp;
                            To reorder a custom category:</p>
                        <ol>
                            <li>
                                <p style="margin-left: 10px">
                                    Select a custom category to be reordered. (Tick the checkbox)</p>
                            </li>
                            <li>
                                <p style="margin-left: 10px">
                                    Click the <i>Arrow (^/v)</i> button on right side of the category list.</p>
                            </li>
                        </ol>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Visibility</b><br />&nbsp;&nbsp;&nbsp;
                            To configure visibility of a category:</p>
                        <ol>
                            <li>
                                <p style="margin-left: 10px">
                                    Click the <i>Switch </i> button in the visible column of the category list.</p>
                            </li>
                        </ol>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>AutoStart</b><br />&nbsp;&nbsp;&nbsp;
                            To configure auto start property of a category:</p>
                        <ol>
                            <li>
                                <p style="margin-left: 10px">
                                    Click the <i>Switch </i> button in the auto start column of the category list.</p>
                            </li>
                        </ol>
                    </li>
                    <li>
                        <p style="margin-left: 10px">
                            <b>Hot Keys</b><br />&nbsp;&nbsp;&nbsp;
                            To configure hot key for a category:</p>
                        <ol>
                            <li>
                                <p style="margin-left: 10px">
                                    Click the cell against the corresponding category. This will open up a popup.</p>
                            </li>
                            <li>
                                <p style="margin-left: 10px">
                                    Select the hot keys for the selected category.</p>
                            </li>
                            <li>
                                <p style="margin-left: 10px">
                                     Click on apply.</p>
                            </li>
                        </ol>
                    </li>
                </ul>
        </ul>
        <ul>
        <li>
            <p style="margin-left: 10px">
                <b>Creating Custom Category.<br /></b>&nbsp;&nbsp;&nbsp; Creating a custom category or in simple term a windows application that can be plugged into 
                Extensil framework, one has to first develop a category and the followed by its 
                packaging. Each of these steps are described in detail below.</p>
            <ul>
                <li>
                    <p style="margin-left: 10px">
                        <b>Developing Category Form<br />&nbsp;</b>&nbsp;&nbsp;&nbsp; To create a custom 
                category one has to reference Extensil.Common.dll (<a 
                href="http://winappextensil.googlecode.com/svn/trunk/Extensil/bin/Release/Extensil.Common.zip">download</a>) 
                in the windows application project.</p>
                    <ul>
                        <li>
                            <p style="margin-left: 10px">
                                In your main Windows Form code include below namespace reference.
                                <br /><span class="style5">using Extensil.Common;</span></p>
                        </li>
                        <li>
                            <p style="margin-left: 10px">
                                Replace Form inheritance<br /><span class="style4">public partial class MyCustomCategory : <b>Form</b> <br />{
                                <br />
                                }<br /></span><br /><br />with BaseCategory<br />
                                <span class="style5">public partial class MyCustomCategory : <b>BaseCategory</b> <br />{
                                <br />
                                                                }<br />
                                </span>
                                <span class="style6">With above changes the windows application can now be packaged and plegged to Extensil. To customize the category 
                                you can follow below steps.
                                </span></p>
                        </li>
                        <li>
                            <p style="margin-left: 10px">
                                If your application has a settings form, replace the Form inheritance of this<br /><span class="style4">public partial class MyCustomCategorySettings : <b>Form</b> <br />{
                                <br />
                                }<br /></span><br /><br />with BaseSetting<br />
                                <span class="style5">public partial class MyCustomCategorySettings : <b>BaseSetting</b> <br />{
                                <br />
                                                                }<br />
                                </span>
                                <br /><br />
                                Now in the main form override the Setting property as shown below.<br /><br />
                                <span class="style5">public override BaseSetting Setting<br />{
                                <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new MyCustomCategorySettings();<br />
                                                                }<br /></span></p>
                        </li>
                        <li>
                            <p style="margin-left: 10px">
                                If your application has a help form, replace the Form inheritance of this<br /><span class="style4">public partial class MyCustomCategoryHelp : <b>Form</b> <br />{
                                <br />
                                }<br /></span><br /><br />with BaseHelp<br />
                                <span class="style5">public partial class MyCustomCategoryHelp : <b>BaseHelp</b> <br />{
                                <br />
                                                                }<br />
                                </span>
                                <br /><br />
                                Now in the main form override the Help property as shown below.<br /><br />
                                <span class="style5">public override BaseHelp Help<br />{
                                <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new MyCustomCategoryHelp();<br />
                                                                }<br /></span></p>
                        </li>
                        <li>
                            <p style="margin-left: 10px">
                                If your application has any other form and you would like to display a menu on Extensil window, 
                                you can do this by replacing the Form inheritance of this<br /><span class="style4">public partial class MyCustomCategoryTool1 : <b>Form</b> <br />{
                                <br />
                                }<br /></span><br /><br />with BaseTool<br />
                                <span class="style5">public partial class MyCustomCategoryTool1 : <b>BaseTool</b> <br />{
                                <br />
                                                                }<br />
                                </span>
                                <br /><br />
                                Now in the main form call AddTool method from the constructor.<br /><br />
                                <span class="style5">public MyCustomCategory()<br />{
                                <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BaseTool tool = new MyCustomCategoryTool1();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddTool(tool);<br />
                                                                }<br /></span><br />
                            </p>
                        </li>
                        Now we are ready to package the category. To do this build your windows application to generate required assemblies. 
                        Next section describes the steps to package your category plugin files.
                    </ul>
                   <br />
                </li>
            </ul>
        </li>
        <ul>
                <li>
                    <p style="margin-left: 10px">
                        <b>Packaging Category<br /></b>&nbsp;&nbsp;&nbsp;&nbsp; A Category package is 
                        basically a zipped folder that contains your windows application build files, 
                        its associated resource files and Plugin information file. To create a package 
                        follow below steps.</p>
                    <ul>
                        <li>
                            <p style="margin-left: 10px">
                                Build your windows application to generate required assemblies.
                            </p>
                        </li>
                        <li>
                            <p style="margin-left: 10px">
                                Create a folder and paste the generated assemblies and its dependencies in a 
                                newly created folder.</p>
                        </li>
                        <li>
                            <p style="margin-left: 10px">
                                Copy any other required resource files in the folder.</p>
                        </li>
                        <li>
                            <p style="margin-left: 10px">
                                Create a Plugin.xml file in the folder with below content.</p>
                            <br />
                            <p style="margin-left: 10px; background-color: #99FFCC;">
                            &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
                            &lt;Extensil&gt;<br />
                            &nbsp;&nbsp;&lt;CategoryHandlers&gt;<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&lt;CategoryHandler name="My Custom Category" path="MyCustomCategory, 
                                MyNamespace.MyCustomCategory" version="1.0.0.0" hotKey="ALT|A"&gt;<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Dependants&gt;<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include path="MyNamespace.Dependancy.dll"&gt;&lt;/include&gt;<br />
                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...[other dependant assemblies]...<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Dependants&gt;<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;appSettings&gt;<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;add key="{someSetting}" value="{setting 
                                Value}"/&gt;<br />
                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...[other settings]...<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/appSettings&gt;<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&lt;/CategoryHandler&gt;<br />
                            &nbsp;&nbsp;&nbsp;&nbsp;&lt;CategoryHandler ...<br />
                            &nbsp;&nbsp;&lt;/CategoryHandlers&gt;<br />
                            &lt;/Extensil&gt;<br />
                            </p>
                        </li>
                    </ul>
                </li>
                With this we are ready to test our first Category plugin. To test this you can follow the steps given under section 
                    <i>Add new Category</i>.
            </ul>
        </ul>
        <ul>
        <li>
            <p style="margin-left: 10px">
                <b>Category Versioning.</b></p>
            
        </li>
        <li>
            <p style="margin-left: 10px">
                <b>Disaster Management.</b></p>
            
        </li>
        
        </ul>
        <span class="style2">Discovery</span>
        <ul>
        <li>
            <p style="margin-left: 10px">
                <b>What is Discovery?</b></p>
            
        </li>
        <li>
            <p style="margin-left: 10px">
                <b>New Updated and Installation.</b></p>
            
        </li>
        <li>
            <p style="margin-left: 10px">
                <b>Discovery probing path.</b></p>
            <ul>
                <li>
                    <p style="margin-left: 10px">
                        <b>Configuring probing path.</b></p>
                </li>
            </ul>
            
        </li>
        <li>
            <p style="margin-left: 10px">
                <b>Creating discovery handlers.</b></p>
            <ul>
                <li>
                    <p style="margin-left: 10px">
                        <b>Packaging and installing discovery handlers.</b></p>
                </li>
            </ul>
            
        </li>
        
        </ul>
	</b>
	</body>
</html>